package com.bolehui.base.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author chendongjie     email:chendongjie@gz.iscas.ac.cn
 * @version 1.0
 * @ClassName DataFormatUtils
 * @Description 对日期格式化的util类.
 * @createTime 2024/12/2 9:52
 * Copyright (C) 2021-2022 CASEEDER, All Rights Reserved.
 * 注意：本内容仅限于内部传阅，禁止外泄以及用于其他的商业目的
 */
public class DateFormatter {

    /**
     * 年月日.
     */
    public static final String YYYY_MM_DD = "yyyy-MM-dd";

    /**
     * 年月日,时分秒.
     */
    public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

    /**
     * 私有构造函数避免这个util类被实例化.
     */
    private DateFormatter() {
        // empty
    }

    /**
     * 将所给的日期date按所给的pattern格式化.
     *
     * @param date 需要格式化的日期.
     * @param pattern pattern,具体可见
     *            <code>java.text.SimpleDateFormat</code>
     *            的文档说明.
     * @return 格式化后的字符串
     * @throws IllegalArgumentException
     *             如果date为null或是pattern为空.
     */
    public static String format(Date date, String pattern) {
        checkNull(date, "date");
        checkEmpty(pattern, "pattern");
        SimpleDateFormat dataFormat = new SimpleDateFormat(pattern);

        return dataFormat.format(date);
    }

    /**
     * 将所给的日期date按YYYY_MM_DD_HH_MM_SS格式化.
     *
     * @param date 需要格式化的日期.
     * @return 格式化后的字符串.
     * @throws IllegalArgumentException 如果date为null.
     */
    public static String format(Date date) {
        checkNull(date, "date");
        return format(date, YYYY_MM_DD_HH_MM_SS);
    }

    public static String yyyyMMdd(Date date){
        return format(date, YYYY_MM_DD);
    }

    /**
     * 将所给的日期按所给的pattern格式化.
     *
     * @param dateStr 需要格式化得日期.
     * @param pattern 具体可见
     *            <code>java.text.SimpleDateFormat</code>
     *            的文档说明.
     * @return 格式化后Date对象.
     * @throws IllegalArgumentException
     *             如果date为null或是pattern为空.
     * @throws ParseException 日期格式化时抛出的异常.
     */
    public static Date parse(String dateStr, String pattern) throws ParseException {
        checkEmpty(dateStr, "dateStr");
        checkEmpty(pattern, "pattern");
        SimpleDateFormat dataFormat = new SimpleDateFormat(pattern);

        return dataFormat.parse(dateStr);
    }

    /**
     * 检查所给的参数是否为null.
     *
     * @param obj 被检查的参数
     * @param paramName 被检查的参数名称
     * @throws IllegalArgumentException 如果所给参数为null.
     */
    public static void checkNull(Object obj, String paramName) {
        if (obj == null) {
            throw new IllegalArgumentException("Parameter with name " + paramName + " can not be null");
        }
    }

    /**
     * 检查所给的字符串是否为空. 字符串为空是指字符串为null或者str.trim().length为0.
     *
     * @param str 被检查的参数
     * @param paramName 被检查的参数名称
     * @throws IllegalArgumentException 如果字符串为空
     */
    public static void checkEmpty(String str, String paramName) {
        checkNull(str, paramName);
        if (str.trim().length() == 0) {
            throw new IllegalArgumentException("Parameter with name " + paramName + " can not be empty");
        }
    }
}
